/**
 * 构造函数 Person
 */
function Person() {
    this.name = '中国人'
    this.pets = ['小煤球', 'java']
}
Person.prototype.run = function (params) {
    console.log("跑");
}

/**
 * 构造函数 Student
 */
function Student() {
    this.num = '学号'
}
// （抛弃）
// //原型链继承关键 :改变student的原型对象为Person的原型对象
// //缺点：无法拥有父类身上的属性和方法 
// Student.prototype = Person.prototype

//1、构造父类的实例
const person = new Person()
//2、并设置为子类的原型对象
Student.prototype = person
//3、改变constructor的指向 (不改的话，p1.constructor.name是Person)
Student.prototype.constructor = Student

//原型链继承的缺点：多个实例对引用类型做操作会被篡改

const p1 = new Student()

p1.run()
console.log(p1.num);
console.log(p1.name);
console.log(p1.pets.push('狗')); //多个实例对引用类型做操作会被篡改
console.log(p1.constructor.name);

const p2 = new Student()
console.log(p2.pets); //引用类型会被篡改